#include <stdio.h>

#define true 1
#define false 0

// 静态函数只允许当前文件调用

static void function_01();

// 全局变量的作用域: 整个工程, 全部文件
// 全局变量的生命周期: 在执行 main 函数之前已经开辟内存空间, 程序执行结束之后才释放空间
// 变量未初始化的值: 0

int global_number = 300; // 全局变量

// 静态全局变量的作用域: 当前文件
// 静态全局变量的生命周期: 在执行 main 函数之前已经开辟内存空间, 程序执行结束之后才释放空间
// 变量未初始化的值: 0

static int static_global_number = 500; // 静态全局变量

int main() {
    int *p_01 = NULL;

    if (true) {
        int locality_number = 100; // 局部变量
        p_01 = &locality_number;

        printf("locality_number = %d\n", locality_number);  // 100
        printf("\n");
    }

    // locality_number = 200; // error

    // 局部变量的作用域: 只在 {} 之内有效
    // 局部变量的生命周期: 在变量的定义时开辟空间, 在函数执行结束后释放空间
    // 变量未初始化的值: 随机值

    // 超出局部变量的作用域, 数值正确, 操作非法
    printf("locality_number = %d\n", *p_01);    // 100
    *p_01 = 200;
    printf("locality_number = %d\n", *p_01);    // 200
    printf("\n");

    function_01();                              // 200
    function_01();                              // 300
    printf("\n");

    return 0;
}

static void function_01() {
    // 静态局部变量的作用域: 只在 {} 之内有效
    // 静态局部变量的生命周期: 在执行 main 函数之前已经开辟内存空间, 程序执行结束之后才释放空间
    // 变量未初始化的值: 随机值

    static int static_locality_number = 100; // 静态局部变量

    static_locality_number += 100;
    printf("static_locality_number = %d\n", static_locality_number);
}